package eventbus

import (
	"context"
	"encoding/json"
)

// Serializer 定义事件序列化接口
type Serializer interface {
	Marshal(event any) ([]byte, error)
	Unmarshal(data []byte, event any) error
}

// JSONSerializer 默认JSON序列化器
type JSONSerializer struct{}

func (j *JSONSerializer) Marshal(event any) ([]byte, error) {
	return json.Marshal(event)
}

func (j *JSONSerializer) Unmarshal(data []byte, event any) error {
	return json.Unmarshal(data, event)
}

// EventBus 事件总线接口
type EventBus interface {
	// Subscribe 订阅事件：注册特定类型事件的处理函数
	Subscribe(eventType any, handler EventHandler) error
	// Publish 发布事件
	Publish(ctx context.Context, event any) error
	// Start 启动时间消费
	Start(ctx context.Context) error
	// Close 关闭事件总线
	Close() error
}

// EventHandler 事件处理函数类型
type EventHandler func(ctx context.Context, event any) error
